package com.taotao.manage.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.common.bean.ItemCatData;
import com.taotao.common.bean.ItemCatResult;
import com.taotao.manage.mapper.ItemCatMapper;
import com.taotao.manage.pojo.ItemCat;

@Service
public class ItemCatService extends BaseService<ItemCat> {
    @SuppressWarnings("unused")
    @Autowired
    private ItemCatMapper itemCatMapper;
    
    @Autowired
    private RedisService redisService;
    
    // 商品分类在redis中的key
    @Value("${TT_MANAGE_ITEMCATGORY}")
    private String ITEMCATGORY_KEY;
    // 商品分类在redis中的存活时间
    @Value("${TT_MANAGE_ITEMCATGORY_TIME}")
    private Integer ITEMCATGORY_KEY_TIME;

    /**
     * 查询所有的分类信息，转化成接口需要ItemCatResult数据结构
     * 
     * @return ItemCatResult
     */
    public ItemCatResult queryItemCatAllToTree() {
        // 先查询redis中是否存在值，如果存在直接返回
        try {
            String jsonResult = redisService.get(ITEMCATGORY_KEY);
            if (StringUtils.isNotBlank(jsonResult)){
                // 将结果转化成ItemCatResult对象返回
                ItemCatResult result = ProperttiesService.MAPPER.readValue(jsonResult, ItemCatResult.class);
                return result;
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 返回的结果
        ItemCatResult itemCatResult = new ItemCatResult();

        ItemCat record = new ItemCat();
        // 获取第一级商品分类
        record.setParentId(0L);
        List<ItemCat> firstCat = super.queryListByWhere(record);
        // 保存第一级数据的list
        List<ItemCatData> firstData = new ArrayList<ItemCatData>();
        itemCatResult.setData(firstData);
        // 遍历第一级商品分类
        for (ItemCat firstItemCat : firstCat) {
            ItemCatData firstDataContent = new ItemCatData();
            firstDataContent.setUrl("/products/" + firstItemCat.getId() + ".html");
            firstDataContent.setName("<a href='/products/" + firstItemCat.getId() + ".html'>"
                    + firstItemCat.getName() + "</a>");
            // 获取第二级商品分类
            record.setParentId(firstItemCat.getId());
            List<ItemCat> secondCat = super.queryListByWhere(record);
            // 保存第二级数据的list
            List<ItemCatData> secondtData = new ArrayList<ItemCatData>();
            firstDataContent.setItems(secondtData);
            // 遍历第二级商品分类
            for (ItemCat secondItemCat : secondCat) {
                ItemCatData secondDataContent = new ItemCatData();
                secondDataContent.setUrl("/products/" + secondItemCat.getId() + ".html");
                secondDataContent.setName(secondItemCat.getName());
                // 获取第三级商品分类
                record.setParentId(secondItemCat.getId());
                List<ItemCat> thirdCat = super.queryListByWhere(record);
                // 保存第三级商品分类的list
                List<String> thirdData = new ArrayList<String>();
                secondDataContent.setItems(thirdData);
                // 遍历第三级商品分类
                for (ItemCat thirdItemCat : thirdCat) {
                    thirdData.add("/products/" + thirdItemCat.getId() + ".html|" + thirdItemCat.getName());
                }

                secondtData.add(secondDataContent);
            }
            firstData.add(firstDataContent);
        }
        
        // 将查询的结果，放入redis中
        try {
            String valueAsString = ProperttiesService.MAPPER.writeValueAsString(itemCatResult);
            // 设置过期的时间
            redisService.set(ITEMCATGORY_KEY, valueAsString, ITEMCATGORY_KEY_TIME);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return itemCatResult;
    }

    /**
     * 根据父类的id，返回所有的子分类
     * 
     * @param parentId
     * @return
     */
    // public List<ItemCat> queryItemCatByParentId(Long parentId) {
    // ItemCat record = new ItemCat();
    // record.setParentId(parentId);
    // List<ItemCat> list = itemCatMapper.select(record);
    // return list;
    // }

    // 初始化mapper
    // @Override
    // public Mapper<ItemCat> getMapper() {
    // return this.itemCatMapper;
    // }

}
